<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>stm32单片机</title>
    <!-- 引入facicon.ico网页图标 -->
	<link rel="shortcut icon" href="../favicon.ico"  type="image/x-icon"/> 
    <!-- 引入 layui.css -->
    <link rel="stylesheet" href="../layui/dist/css/layui.css">
    <!-- 自定义样式 -->
    <link rel="stylesheet" href="../css/style.css">
    <!-- 内容排版 -->
    <link rel="stylesheet" href="../css/typo.css">
    <!-- 动画效果 -->
    <link rel="stylesheet" href="../css/animate.css">
    <!-- 代码高亮  -->
    <link rel="stylesheet" href="../lib/prism/prism.css">
    <!-- 目录生成 Tocbot -->
    <link rel="stylesheet" href="../lib/tocbot/tocbot.css">
    
</head>
<body>
   
    <div class="layui-row w">
        <div class="layui-col-xs6 layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-header m-card-header">stm32单片机</div>
                <div class="layui-card-body typo  typo-selection text js-toc-content">
                    <b style="font-size: 18px;">目录</b>
                    <ol id="table" style="text-decoration:none;">
                      <li><a href="#section1">1. stm32简介</a></li>
                      <li><a href="#section2">2. 入门stm32</a>
                        <ol>
                          <li><a href="#section2-1">2.1 开发方式</a>
                          <li><a href="#section2-2">2.2 视频推荐</a>
                          <ol>
                            <li><a href="#section2-2-1">2.2.1 库函数</a></li>
                            <li><a href="#section2-2-2">2.2.2 hal库</a></li>
                          </ol>
                        </li>
                          <li><a href="#section2-3">2.3 项目练手</a></li>
                        </ol>
                      </li>
                    </ol>
                    
                    <h2 id="section1">1. stm32简介 </h2>
                    <p>stm32是由STMicroelectronic公司开发的32位微处理器集成电路.其内核是Arm的Cortex架构.I/O口众多,功能强大具体描述就不说了，数据手册上很详细，就不搬运了</p>
                    <h2 id="section2">2. 入门stm32</h2>
                    <p>虽然我按顺序由简单到困难列出了学习顺序但是当我们开发时就要考虑很多了，不能为了使用而使用，你要考虑的是， 我可以用STM32实现什么?为什么使用STM32而不是8051? 是因为51的频率太低，无法满足计算需求?是51的管脚太少，无法满足众多外设的IO? 是51的功耗太大，电池挺不住?是51的功能太弱，
                    而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多?当你需要使用STM32某些功能，而51实现不了的时候， 那51自然不需要学习，你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要硬件产生iic、要使用rtos等等。。。</p>
                    <p><mark>英文好的一定要多看英文原版的数据手册，开发手册</mark></p>
                    <p><mark>英文不好的也要多看英文原版的数据手册，开发手册</mark>实在看不进的就先看中文版的，入门后再回头看</p>
                    <h3 id="section2-1">2.1 开发方式</h3>
                    <p>1、直接配置寄存器</p>  
                    <p>不少先学了51的朋友可能会知道，会有一小部分人或是教程是通过汇编语言直接操作寄存器实现功能的，这种方法到了STM32就变得不太容易行得通了，因为STM32的寄存器数量是51单片机的十数倍，如此多的寄存器根本无法全部记忆，开发时需要经常的翻查芯片的数据手册，此时直接操作寄存器就变得非常的费力了。但还是会有很小一部分人，喜欢去直接操作寄存器，因为这样更接近原理，知其然也知其所以然。
                    </p>
                    <p>2、标准库</p>
                    <p>上面也提到了，STM32有非常多的寄存器，而导致了开发困难，所以为此ST公司就为每款芯片都编写了一份库文件，也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中，包括一些常用量的宏定义，把一些外设也通过结构体变量封装起来，如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器，从而选择不同的功能。也是目前最多人使用的方式，也是学习STM32接触最多的一种开发方式。
                    </p>
                    <p>3、HAL库</p>
                    <p>HAL库是ST公司目前主力推的开发方式，全称就是Hardware Abstraction Layer（抽象印象层）。库如其名，很抽象，一眼看上去不太容易知道他的作用是什么。
                    它的出现比标准库要晚，但其实和标准库一样，都是为了节省程序开发的时期，而且HAL库尤其的有效，如果说标准库把实现功能需要配置的寄存器集成了，那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说，同样的功能，标准库可能要用几句话，HAL库只需用一句话就够了。
                    并且HAL库也很好的解决了程序移植的问题，不同型号的stm32芯片它的标准库是不一样的，例如在F4上开发的程序移植到F3上是不能通用的，而使用HAL库，只要使用的是相通的外设，程序基本可以完全复制粘贴，注意是相通外设，意思也就是不能无中生有，例如F7比F3要多几个定时器，不能明明没有这个定时器却非要配置，但其实这种情况不多，绝大多数都可以直接复制粘贴。是而且使用ST公司研发的<mark>StmCube</mark>软件，可以通过图形化的配置功能，直接生成整个使用HAL库的工程文件，可以说是方便至极，但是方便的同时也造成了它执行效率的低下，在各种论坛帖子真的是被吐槽的数不胜数。
                    </p>
                    <h3 id="section2-2">2.2 视频推荐</h3>
                    <blockquote><h4 id="section2-2-1">2.2.1 标准库</h4></blockquote>
                    <p><mark>标准库</mark>是使用最多的一种开发方式，但是<mark>hal库</mark>也流行起来了，那我们到底要学哪一个啊？当然都要啊，小孩子才做选择</p>
                    <p>我在入门学32的时候本来是想买个板子的，但是我又觉得很贵，而且那些外设我还都有就是没有集中到一个板子上而已，所以我买了一个32核心板，又买了杜邦线，不到十块钱ヽ(￣▽￣)ﾉ 咱们穷学生学单片机能省就省</p>
                    <p>所以我的第一二个视频是介绍核心板的：</p>
                    <p><a href="https://www.bilibili.com/video/BV1i7411679X?spm_id_from=333.999.0.0" target="_black">小马哥STM32F103最小系统板开发课程视频</a></p>
                    <p><a href="https://www.bilibili.com/video/BV1M7411n7et?spm_id_from=333.999.0.0" target="_black">STM32F103C8T6核心板使用专题讲解 带你轻松玩32[开放未来科技]</a></p>
                    <p>之后我们就要看行业巨头野火的视频了，火哥会带这你一点点的了解32，从地址到寄存器到库函数我们一点点的打怪升级，没有他们官方的板子也不要紧，只要是核心芯片一样就行，想做视频中的例程的话就再单独买外设，很便宜的</p>
                    <p><a href="https://www.bilibili.com/video/BV1yW411Y7Gw?spm_id_from=333.999.0.0" target="_black">野火STM32F103教学视频</a></p>
                    <p>有功夫的在复习一下吧： </p>
                    <p><a href="https://www.bilibili.com/video/BV1N7411x7Yk/?spm_id_from=333.788.recommend_more_video.7" target="_black">海创电子stm32</a></p> 
                    <h5>嵌入式</h5>
                    <p>1. <i class="serif">FreeRTOS</i></p>
                    <p><mark>FreeRTOS</mark>是一个迷你的实时操作系统内核。作为一个轻量级的操作系统，功能包括：任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等，可基本满足较小系统的需要。</p>
                     <p>推荐原子哥的视频：<a href="https://www.bilibili.com/video/BV1a4411Q7X1?spm_id_from=333.999.0.0" target="_black">正点原子FreeRTOS手把手教学-基于STM32</a></p> 
                     <p>2. <i class="serif">Linux</i></p>
                    <p><mark>Linux</mark>，全称GNU/Linux，是一套免费使用和自由传播的类Unix操作系统，是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展，Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外，在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制，而且可以根据自身的需要来修改完善Linux，使其最大化地适应用户的需要。</p>
                    <p>推荐视频：</p>
                     <p><a href="https://www.bilibili.com/video/BV1Aa4y1Y7ww?spm_id_from=333.999.0.0" target="_black">TOP10爱用【嵌入式】开发板盘点</a></p>
                     <p><a href="https://www.bilibili.com/video/BV1DK411P775?p=4" target="_black">Linux嵌入式教学视频(正点原子阿尔法ARM开发板，IMX6ULL) </a> (<a href="http://www.openedv.com/docs/boards/arm-linux/zdyz-i.mx6ull.html" target="_black">资料链接</a>)</p>
                    
                    <blockquote><h4 id="section2-2-2">2.2.2 hal库</h4></blockquote>
                    <p>HAL库工程一般使用Cube软件来生成工程。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件，更方便的实现跨STM32产品的最大可移植性。优势就是不需要开发工程师再关注所用MCU型号，只需要专注所以要的功能软件开发工作。而且是未来主推的方向，正在不断的推出更新。HAL库推出的同时，也加入了很多第三方的中间件，有RTOS，USB，TCP / IP和图形等等。和标准库对比起来，STM32的HAL库更加的抽象，ST最终的目的是要实现在STM32系列MCU之间无缝移植，甚至在其他MCU也能实现快速移植。
                    <p>我刚学完标准库又学hal库的时候感觉有点蒙，不知道文件要去哪找，功能要去哪配，所以我看了好几个视频</p>
                    <p>在我整理这个文档的时候突然发现野火上传了hal库的视频，很激动，虽然我没看过但还是推荐给你们，不好咱就不看，是不是</p>
                    <p><a href="https://www.bilibili.com/video/BV18X4y1M763/?spm_id_from=333.788.recommend_more_video.7" target="_blank">野火STM32 HAL库开发实战指南</a></p>
                    <p>这是一些我看过的一些觉得挺好的，可以互相补充，大家挑需要的看一下</p>
                    <p><a href="https://www.bilibili.com/video/BV1oT4y1u7g4?p=5" target="_blank">基于STM32F1的HAL库学习教程</a></p>
                    <p><a href="https://www.bilibili.com/video/BV1JE411J72x?from=search&seid=12609891717187144536&spm_id_from=333.337.0.0" target="_blank">最新hal库学习方法_大合集_STM32CUBEMX教程</a></p>
                    <p><a href="https://www.bilibili.com/video/BV1yp411f7gs?spm_id_from=333.999.0.0" target="_blank">基于HAL库的STM32F407视频教程（硬石STM32)</a></p>
                    <p><a href="https://www.bilibili.com/video/BV1m7411H7oT?p=3" target="_blank">【小蜜蜂笔记】基于STM32CubeMX的嵌入式开发基础教程</a></p>
                    <h4>FreeRTOS:</h4>
                    <p><a href="https://www.bilibili.com/video/BV1eE411477L?spm_id_from=333.999.0.0" target="_blank">最新FreeRTOS操作系统教程-简直0基础掌握-封装后</a>（<a href="https://www.keil.com/pack/doc/cmsis/RTOS2/html/index.html" target="_blank">cmsis-rtos接口文档</a>）</p>
                    <h3 id="section2-3">2.3 项目练手</h3>
                    <p>1. 物联网：</p>
                    <p><a href="https://www.bilibili.com/video/BV1ae411W7yD?spm_id_from=333.999.0.0" target="_blank">[挽救小白第一季]STM32+8266+小程序智能家居毕设实战</a> <mark>不会有人没发现这个能做毕设吧</mark>o(*￣▽￣*)o </p>
                    <p>2. 平衡小车系列：</p>
                    <p><a href="https://www.bilibili.com/video/BV1z4411G7jU?p=11" target="_blank">[慧净]STM32平衡小车视频教程</a></p>
                    <p><a href="https://space.bilibili.com/386711674/channel/detail?cid=107023&ctype=0" target="_blank">天下行走平衡小车</a></p>
                    <p><a href="https://www.yahboom.com/study/bc-32" target="_blank">亚博智能STM32平衡小车</a></p>
                    <p>自己参加郑州电赛的平衡车项目（资料qq群里下载）<a href="https://blog.csdn.net/mianer1/article/details/109432136?spm=1001.2014.3001.5501" target="_blank" rel="noopener noreferrer">可以参考我写的博客笔记</a> 求个赞不过分吧</p>
                    <p>3. 四轮智能小车：</p>
                    <p><a href="https://www.bilibili.com/video/BV1i54y1C7yN?from=search&seid=11345688909005780682&spm_id_from=333.337.0.0" target="_blank">【四驱智能小车】-STM32主控-循迹-避障-2.4G遥控</a></p>
                    <p><a href="https://www.bilibili.com/video/BV1VE411h7eA" target="_blank" rel="noopener noreferrer">4.语音识别垃圾分类垃圾桶设计</a></p>
                    <p>5. stm32飞控：没有做过自己找视频吧~</p>
                    <p> 以上提及所有视频项目资料我的网盘里也为大家收集整理好了(快夸我贴心ヾ(o´∀｀o)ﾉ )</p>
                    <p><a href="https://pan.baidu.com/s/1qcb173tkveygV2F1LsC2Xw" target="_blank">网盘链接</a> <mark>提取码：73g2</mark></p> 
                </div>
            </div>
        </div>
    </div>

   

<div id="toc"  style=" display:none;">
    <ol class="js-toc">
    </ol>
</div>
<div id="qq"  style=" display:none;">
   <img src="/img/QQ.png" alt="">
</div>

    <!-- 引入 layui.js -->
    <script src="../layui/dist/layui.js"></script>
<script src="../lib/prism/prism.js"></script>
<script src="../lib/tocbot/tocbot.min.js"></script>
<script>
    layui.use(['util', 'laydate', 'layer'], function(){
      var util = layui.util
      ,laydate = layui.laydate
      ,$ = layui.$
      ,layer = layui.layer;
      //固定块
      util.fixbar({
        bar1: '&#xe705;'
        ,bar2: '&#xe676;'
        ,css: {right: 50, bottom:20}
        ,bgcolor: '#5FB878'
        ,click: function(type){
          if(type === 'bar1'){
            //页面层-自定义
            mainIndex = layer.open({
                type: 1, 
                title: ['目录', 'font-size:18px;text-align:right;'],
                content: $('#toc'),
                offset: 'r',
                anim: 5,
                resize:false,
                shade:0
            });
          } else if(type === 'bar2') {
           //页面层-自定义
           mainIndex = layer.open({
                type: 1, 
                title: false,
                content: $('#qq'),
                anim: 5,
                resize:false,
                closeBtn: 0,
                shade: [0.7, '#393D49'],
                shadeClose:true,
                time: 60000
            });
          }
        }
      });
    });   
</script> 
 <script>
     //生成目录的初始化
     tocbot.init({
        //目录生成的位置
        tocSelector: '.js-toc',
        // 那些要生成目录
        contentSelector: '.js-toc-content',
        //目录级别
        headingSelector: 'h1, h2, h3, h4',
    });

    
 </script>
</body>
</html>